package com.dmwork.service.work.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dmwork.service.work.entity.Work;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dmwork.service.work.entity.vo.*;
import com.dmwork.service.work.entity.vo.admin.AdminWorkBaseInfoVo;
import com.dmwork.service.work.entity.vo.admin.AdminWorkQueryVo;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author 李天
 * @since 2021-03-14
 */
public interface WorkService extends IService<Work> {

    /**
     * 获取作品详情信息
     *
     * @param workId 作品id
     * @return
     */
    WorkDetailInfoVo getWorkDetailInfoById(String workId);

    /**
     * 发布作品
     *
     * @param id                用户id
     * @param workPublishInfoVo 作品数据
     * @return 作品id
     */
    String publishWork(String id, WorkPublishInfoVo workPublishInfoVo);

    /**
     * 获取个人作品列表
     *
     * @param customerId 个人id
     * @param page       页数
     * @param limit      每页记录数
     * @return
     */
    Page<Work> getInfoPage(String customerId, Integer page, Integer limit);

    /**
     * 获取所有作品列表
     *
     * @param workQueryVo 查询条件对象
     * @param page        页数
     * @param limit       每页记录数
     * @return
     */
    Page<WorkBaseInfoVo> getWorkPage(WorkQueryVo workQueryVo, Integer page, Integer limit);

    /**
     * 获取指定类型的热门作品
     *
     * @param count  数量
     * @param typeId 类型
     * @return
     */
    List<WorkBaseInfoVo> getHotList(Integer count, String typeId);

    /**
     * 根据用户id获取作品基本信息列表
     *
     * @param customerId 用户id
     * @param page
     * @param limit
     * @return
     */
    Page<WorkBaseInfoVo> getWorkBaseInfoPageByCustomerId(String customerId, Integer page, Integer limit);

    /**
     * 根据作品id列表批量获取作品基本信息列表
     *
     * @param workIdList
     * @return
     */
    List<WorkBaseInfoVo> getWorkBaseInfoListByIds(List<String> workIdList);

    /**
     * 批量更新作品收藏数
     * @param workIdList 作品id列表
     * @param flag flag==1，增加收藏数；flag==0，减少收藏数
     */
    void modifyBatchWorkCollectCount(List<String> workIdList, Integer flag);

    /**
     * 增加作品收藏数
     * @param workId 作品id
     */
    void increaseCollectCount(String workId);

    /**
     * 减少作品收藏数
     * @param workId 作品id
     */
    void decreaseCollectCount(String workId);

    /**
     * 获取作品信息列表的分页
     * @param page
     * @param limit
     * @param workQueryVo 查询条件
     * @return
     */
    Page<AdminWorkBaseInfoVo> getAdminWorkBaseInfoPage(Integer page, Integer limit, AdminWorkQueryVo workQueryVo);

    /**
     * 删除作品
     * @param workId
     */
    void removeWork(String workId);

    /**
     * 更新作品信息
     * @param workUpdateInfoVo
     */
    void updateWorkInfo(WorkUpdateInfoVo workUpdateInfoVo);
}

